#pragma once
#include<iostream>
#include<string>
#include<pthread.h>

using namespace std;
typedef void* (*func_t)(void*);//函数指针：此处用于线程表示线程的执行函数


//args传参设置：设置成类，增加args传参选择
class ThreadData
{
public:
    string _name;//对应线程名称
    void* _args;//对应线程回调函数中args参数
};




class Thread
{
public:
    Thread(int inode, func_t rountine, void* args)
    :_routine_func(rountine)//注意：这里线程的执行函数、参数args都是需要通过外部传入的
    {
        char buffer[64]="";
        snprintf(buffer, sizeof(buffer), "thread-%d",inode);
        _name = buffer;

        _tdata._args = args;
        _tdata._name = _name;
    }

    ~Thread()
    {}

    void start()//启动线程：用于创建线程，构造函数只是做了线程名称、ID等各参数设置，实则并未真正创建出线程
    {
        pthread_create(&_tid, nullptr, _routine_func, (void*)&_tdata);
    }

    void join()//终止线程
    {
        pthread_join(_tid, nullptr);
    }

private:
    string _name;//线程名
    pthread_t _tid;//线程ID
    func_t _routine_func;//线程的执行函数
    ThreadData _tdata;//传入回调函数的参数（这里做了封装）
};
